package com.md.api.common.utils;

import java.math.BigDecimal;

public class MathUtils {
	
	private MathUtils() {}

	/**
	 * 加
	 * @param a
	 * @param b
	 * @return
	 */
	public static Double add(double a, double b) {
		
		return new BigDecimal(Double.toString(a)).add(new BigDecimal(Double.toString(b))).doubleValue();
	}
	
	/**
	 * 加
	 * @param ds
	 * @return
	 */
	public static Double add(double... ds) {
		BigDecimal dec = new BigDecimal(Double.toString(ds[0]));
		for (int i = 1; i < ds.length; i++) {
			dec = dec.add(new BigDecimal(Double.toString(ds[i])));
		}
		return dec.doubleValue();
	}
	
	/**
	 * 减
	 * @param a
	 * @param b
	 * @return
	 */
	public static Double subtract(double a, double b) {
		
		return new BigDecimal(Double.toString(a)).subtract(new BigDecimal(Double.toString(b))).doubleValue();
	}

	/**
	 * 乘
	 * @param a
	 * @param b
	 * @return
	 */
	public static Double multiply(double a, double b) {
		
		return new BigDecimal(Double.toString(a)).multiply(new BigDecimal(Double.toString(b))).doubleValue();
	}

	/**
	 * 乘
	 * @param ds
	 * @return
	 */
	public static Double multiply(double... ds) {
		BigDecimal dec = new BigDecimal(Double.toString(ds[0]));
		for (int i = 1; i < ds.length; i++) {
			dec = dec.multiply(new BigDecimal(Double.toString(ds[i])));
		}
		return dec.doubleValue();
	}
	
	/**
	 * 乘
	 * @param a
	 * @param b
	 * @return
	 */
	public static Double multiply(double a, int b) {
		
		return new BigDecimal(Double.toString(a)).multiply(new BigDecimal(Double.toString(b))).doubleValue();
	}
	
	
	/**
	 * 除
	 * @param a
	 * @param b
	 * @return
	 */
	public static Double divide(double a, double b) {
		
		return new BigDecimal(Double.toString(a)).divide(new BigDecimal(Double.toString(b)),4,BigDecimal.ROUND_HALF_UP).doubleValue();
	}
	
	/**
	 * 除
	 * @param a
	 * @param b
	 * @return
	 */
	public static Double divide(double a, double b, int newScale, int roundingMode) {
		
		return new BigDecimal(Double.toString(a)).divide(new BigDecimal(Double.toString(b))).setScale(newScale, roundingMode).doubleValue();
	}
	
	public static Double setScale(double a, int newScale, int roundingMode) {
		return new BigDecimal(Double.toString(a)).setScale(newScale, roundingMode).doubleValue();
	}
}
